﻿Public Class CLabelCheckState : Inherits CStateBase

    ''' <summary>
    ''' 実行可能かを判断する
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function IsEnter(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.IsEnter")
        If CCommon.isInStr(task.ActionCd, "SHIPTOLABEL", "LABEL", "CHNG") Then
            Return True
        Else
            Return False
        End If
    End Function

    ''' <summary>
    ''' 実行メソッド
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExecute(ByVal task As CTaskBase) As CStateBase
        Dim nextState As CStateBase = Nothing
        Dim pdaTask As CPDATask = DirectCast(task, CPDATask)
        Dim webMng As CWebManager = CWebManager.GetInstance
        Dim checkInfo As CCheck = CCheck.GetIns
        Dim AppManager As CApplicationManager = CApplicationManager.GetInstance

        'Dim waitTask As CPersonal = New CPersonal(pdaTask)
        Debug.WriteLine("CLabelCheckState.DoExecute...START")

        If task.ProcessText = "" Then
            '' リーダーからデータを取得する(待ち時間制限なし)
            If CCommon.FlagManage("INNERLABEL") Then
                pdaTask.WindowManager.SetMessage(CConst.CNS_MSG_010, CConst.COLOR_BLACK, CConst.COLOR_GREEN)
            Else
                pdaTask.WindowManager.SetMessage(CConst.CNS_MSG_009, CConst.COLOR_BLACK, CConst.COLOR_GREEN)
            End If

            task.ProcessText = task.ReadTextWait(-1)
            Debug.WriteLine("読んだバーコード:" & task.ProcessText)
        End If

        ''バーコード判別(統括コード)
        Select Case CBarcode.GetBarcodeType(task.ProcessText)

            '従業員コード
            Case EnumBarcodeType.EMP_CODE
                Debug.WriteLine("社員番号読みました。")
                
                If Not AppManager.m_AppSetting.IsStaticReadEmpCd Then
                    '社員番号
                    '交代
                    'waitTask.Waiting(CCommon.CNS_MSG_064, pdaTask.WindowManager.GetWindowMode())
                    Dim EmpData As CCheck.EmpData = checkInfo.ChkEmpData(task.ProcessText)
                    pdaTask.WindowManager.SetEmpInfo(EmpData.empCd & ":[" & EmpData.empName & "]") '
                    pdaTask.EmpCd = EmpData.empCd

                    task.ActionCd = "CHNG"
                    task.ProcessText = ""

                    Return DoBaseExecute(task)
                Else
                    CPersonal.ErrorWindow(pdaTask, EnumWindowMode.ALERT_MODE, _
                                                              Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_020, Color.White)
                    task.ActionCd = "LABEL"
                    task.ProcessText = ""
                    Return DoBaseExecute(task)
                End If

            Case EnumBarcodeType.SEND_CODE
                Debug.WriteLine("送信コード読みました。")
                '送信コード
                '送信ロジック----START>

            
                '送信ロジック----END>
                task.ProcessText = ""
                'waitTask.Waiting(CCommon.CNS_MSG_003, pdaTask.WindowManager.GetWindowMode())
                task.ActionCd = "ORDER"

                'Case EnumBarcodeType.INNER_LABEL_CODE
                '    Debug.WriteLine("社内ラベル読みました。")
                '    '社内ラベル
                '    task.ActionCd = "LABEL-IN"

            Case EnumBarcodeType.END_LABEL_CODE

                Debug.WriteLine("終了コード読みました。")
                Dim filePath As String = CApplicationManager.GetRealPath("master\", CApplicationManager.EnumSpecialFolder.PATH_MYDOCUMENT)

                Try
                    CBgControl.BgThread("ODR", "csv", filePath, checkInfo.GetOrderData(pdaTask.PdaNo, pdaTask.EmpCd))
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try

                ''ラベル読込終了
                pdaTask.WindowManager.SetMessage(CConst.CNS_MSG_023, CConst.COLOR_BLACK, CConst.COLOR_GREEN)

                pdaTask.WindowManager.BaseRelease()
                pdaTask.WindowManager.CloseWindow()
                '終了コード
                'task.ProcessText = ""
                'task.ActionCd = "LOUT"
                'pdaTask.WindowManager.CloseWindow() ''強制終了
                '送信ロジック----START>
                '     送信クラス
                '送信ロジック----END>
                'task.ActionCd = "LOUT"

            Case EnumBarcodeType.GROUP_REPORT_CODE, EnumBarcodeType.REPORT_CODE
                Debug.WriteLine("統括コード読みました。")

                '出荷指示コード
                task.ActionCd = "LABEL"
                pdaTask.OrderCd = ""
                CCommon.FlagManage("INNERLABEL", False)
                pdaTask.WindowManager.SetMessage(CConst.CNS_MSG_008, CConst.COLOR_BLACK, CConst.COLOR_GREEN)
                If webMng.getShiporderData(pdaTask) Then
                    'Else
                    '    '画面の[OK]押す前にはずっとSLEEP
                    '    CPersonal.ErrorWindow(pdaTask, EnumWindowMode.ALERT_MODE, _
                    '                            Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_006, Color.White)
                End If
                task.ProcessText = ""
                Return DoBaseExecute(task)

                'オーダーコード読んだら
            Case EnumBarcodeType.ORDER_CODE

                '注文番号存在チェック
                Dim orderData As CCheck.OrderData = checkInfo.GetOrderData(task.ProcessText.Replace(CConst.CNS_ORDERCD_HEAD, ""))
                ''注文番号が存在しない
                ''エラー
                If orderData.sysItemCd Is Nothing Then
                    task.ProcessText = ""
                    CPersonal.ErrorWindow(pdaTask, EnumWindowMode.ALERT_MODE, _
                                            Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_013, Color.White)
                End If
                task.ProcessText = ""
                task.ActionCd = "LABEL"
                Return DoBaseExecute(task)

                'オーダーコードを選んだら
            Case EnumBarcodeType.KEY_INPUT

                CCommon.FlagManage("INNERLABEL", True)
                CCommon.FlagManage("overCount", True)

                Dim orderCd As String = task.ProcessText.Replace(CConst.CNS_KEY_HEAD, "").Replace(CConst.CNS_KEY_END, "").Replace(CConst.CNS_ORDERCD_HEAD, "")
                pdaTask.OrderCd = orderCd
                task.ProcessText = ""
                task.ActionCd = "LABEL"
                Return DoBaseExecute(task)

            Case EnumBarcodeType.INNER_LABEL_CODE

                '注文番号存在チェック
                Dim orderData As CCheck.OrderData = checkInfo.GetOrderData(pdaTask.OrderCd)
                Dim innerLabel As String() = task.ProcessText.Split("@")

                'システム品番が同じならINNERSTATEに飛んでいく
                If orderData.sysItemCd = innerLabel(0) Then
                    task.ActionCd = "LABEL-IN"
                    nextState = GetNextState(task)
                    Return nextState
                Else
                    task.ProcessText = ""
                    CPersonal.ErrorWindow(pdaTask, EnumWindowMode.ALERT_MODE, _
                                            Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_017, Color.White)
                    task.ActionCd = "LABEL"
                    Return DoBaseExecute(task)
                End If

            Case EnumBarcodeType.CANCEL_CODE
                '出荷取消コード
                task.ActionCd = "CANCEL_LABEL"
                task.ProcessText = ""
                nextState = GetNextState(task)
                Return nextState

            Case Else
                Debug.WriteLine("コードERROR")
                '画面の[OK]押す前にはずっとSLEEP
                '画面の[OK]押す前にはずっとSLEEP
                task.ProcessText = ""
                CPersonal.ErrorWindow(pdaTask, EnumWindowMode.ALERT_MODE, _
                                        Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_007, Color.White)
                task.ActionCd = "LABEL"

                Return DoBaseExecute(task)

        End Select


        task.ProcessText = ""
        nextState = GetNextState(task)
        Return nextState
    End Function

    ''' <summary>
    ''' 終了メソッド(未使用)
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExit(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CLabelCheckState.DoExit")
        Return True
    End Function


End Class
